package Day_0201.JUC;

/**
 * @author zxc
 * @date 2023/02/01 16:12
 **/
public class SynchronizedMap_ConcurrentHashMap {
    public static void main(String[] args) {
        /**
         * SynchronizedMap和ConcurrentHashMap之间的区别？
         *
         * （1）SynchronizedMap和Hashtable一样，实现上在调用map所有方法时，都对整个map进行同步。
         *  ===》 即，当某个线程去操作SynchronizedMap时，会给整个map加上同步锁;
         *
         * （2）而ConcurrentHashMap的实现却更加精细，它对map中的所有桶加了锁。
         *  ===> 即，当某个线程去操作ConcurrentHashMap时，会给所要操作的数据段加上同步锁;
         *  同时，若是其他线程访问其他数据段的话，还是可以继续进行访问的;
         *
         * 总结 ：
         * （1）所以，只要有一个线程访问SynchronizedMap，其他线程就无法进入map，
         *  而如果一个线程在访问ConcurrentHashMap某个桶时，其他线程，仍然可以对map执行某些操作。
         *
         * （2）所以，ConcurrentHashMap在性能以及安全性方面，明显比Collections.synchronizedMap()更加有优势。
         *  同时，同步操作精确控制到桶，这样，即使在遍历map时，如果其他线程试图对map进行数据修改，也不会抛出ConcurrentModificationException。
         */
    }
}
